package com.jrx.anytxn.customer.service;

import com.jrx.anytxn.common.exception.TxnBizException;
import com.jrx.anytxn.customer.dto.BaseApiRes;
import com.jrx.anytxn.customer.dto.bankcardinfo.*;
import com.jrx.anytxn.customer.entity.CmCustomerBankcardInfo;
import com.jrx.anytxn.customer.entity.CmCustomerSecondLevel;

import java.util.ArrayList;
import java.util.List;

/**
 * 银行卡绑定接口管理
 *
 * @author 90443
 * @date 2019/7/18 16:47
 */
public interface IBankCardService {
    /**
     * 绑定银行卡参数
     *
     * @param bankCardBindReq      绑定银行卡参数入参对象
     * @param customersInfo        客户信息
     * @param customerBankcardInfo 银行卡信息
     * @return BankCardBindRes 绑定银行卡参数响应参数
     */
    BankCardBindRes saveBankCard(BankCardBindReq bankCardBindReq, CmCustomerSecondLevel customersInfo,
                                 CmCustomerBankcardInfo customerBankcardInfo) throws TxnBizException;

    /**
     * 根据客户号、渠道、卡号获取卡信息
     *
     * @param customerId 客户号
     * @param channel    渠道
     * @param cardNum    卡号
     * @param tenantId   租户id
     * @return 银行卡信息
     * date: 2019/8/14
     **/
    CmCustomerBankcardInfo getBankByChannleAndCusIdAndCardNum(String customerId, String channel, String cardNum, String tenantId);

    /**
     * 获取此客户的银行卡信息
     *
     * @param customerId     客户id
     * @param defaultPayFlag 默认还款卡标识
     * @param cardNumber         卡号
     * @param channel        渠道
     * @param tenantId       租户id
     * @return CustomerBankcardInfoRes
     * @author fan.yang
     * time 下午 15:48
     */
    CmCustomerBankcardInfo getBankCardByCondition(String customerId, String defaultPayFlag, String cardNumber, String channel, String tenantId) throws TxnBizException;

    /**
     * 对该卡片做解除绑定处理：更新该卡片信息并保存客户银行卡信息表
     *
     * @param bankCardUnBindReq 银行卡解绑请求报文
     * @param customerId        客户id
     * @param userId            用户id
     * @return com.jrx.anytxn.customer.dto.BaseApiRes
     * @author Yangxin
     * @date 2019/9/27 14:31
     */
    BaseApiRes modifyBankCardInfo(BankCardUnBindReq bankCardUnBindReq, String customerId, String userId) throws TxnBizException;

    /**
     * 根据客户id+渠道查询客户银行卡信息表，获得客户当前所有绑定状态的银行卡列表
     *
     * @param customerId         客户id
     * @param channel            渠道
     * @param statusBankcardBind 状态
     * @param tenantId           租户id
     * @return java.util.List<java.util.Map < java.lang.String   ,   java.lang.Object>>
     * @author Yangxin
     * @date 2019/9/27 14:30
     */
    List<BankCardRes> getBankCardList(String customerId, String channel, String statusBankcardBind, String tenantId);

    /**
     * 对该卡片做设置默认收还款标志处理：更新该卡片信息并保存客户银行卡信息表
     *
     * @param bankCardSetFlagReq 银行卡设置默认收还款标志请求报文实体
     * @param customerId         客户id
     * @return com.jrx.anytxn.customer.dto.BaseApiRes
     * @author Yangxin
     * @date 2019/9/27 14:29
     */
    BaseApiRes modifyBankCardSetFlag(BankCardSetFlagReq bankCardSetFlagReq, String customerId) throws TxnBizException;

    /**
     * 银行卡数据查询
     *
     * @param channel    渠道
     * @param customerId 客户id
     * @param tenantId   租户id
     * @return java.util.ArrayList<com.jrx.anytxn.customer.dto.bankcardinfo.BankCardInfoRes> 客户银行卡的
     * @author Liy
     * @date 2019/9/27 14:29
     */
    ArrayList<BankCardInfoRes> getBankCardList(String channel, String customerId, String tenantId);


    /**
     * 获取此客户的银行卡信息
     *
     * @param customerId     客户id
     * @param defaultPayFlag 默认还款卡标识
     * @param channel        渠道
     * @param tenantId       租户id
     * @return CustomerBankcardInfoRes
     */
    CmCustomerBankcardInfo getBankCardByCustomerId(String customerId, String defaultPayFlag, String channel, String tenantId);
}
